"""
NC33 合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=117&&tqId=37735&&companyId=239&rp=1&ru=/company/home/code/239&qru=/ta/job-code-high/question-ranking
"""


class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

# 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
#
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#


class Solution:
    def Merge(self, pHead1: ListNode, pHead2: ListNode) -> ListNode:
        # write code here
        if not pHead1:
            return pHead2

        if not pHead2:
            return pHead1

        cur = None
        node1 = pHead1
        node2 = pHead2
        while (node1 and node2):
            # 第一次，初始化节点
            if cur is None:
                if node1.val > node2.val:
                    cur = node2
                    node2 = node2.next
                else:
                    cur = node1
                    node1 = node1.next

                # 保留头结点
                head = cur
            else:
                if node1.val > node2.val:
                    cur.next = node2
                    cur = node2
                    node2 = node2.next
                else:
                    cur.next = node1
                    cur = node1
                    node1 = node1.next

        if node1 is None:
            cur.next = node2

        if node2 is None:
            cur.next = node1

        return head
